$(function () {//加载表格
    $('#dg').datagrid({
        loadMsg: '数据加载中，请稍后...',
        url: reportworld + '/sqlScript/listInfo',
        pagination: true,
        singleSelect: false,//如果为true，则只允许选择一行。
        title: "SQL脚本列表",
        pageSize: pageSize,
        pageList: pageList,
        checkOnSelect: true,//当用户点击行的时候该复选框就会被选中或取消选中。
        striped: true,//是否显示斑马线效果。
        rownumbers: true,// 显示一个行号列
        fitColumns: false,//真正的自动展开/收缩列的大小，以适应网格的宽度，防止水平滚动。
        columns: [[
            {field: 'itemid', title: 'Order ID', width: 80, checkbox: true},
            {field: 'id', title: '编号', hidden: true},
            {field: 'sqlScript', title: 'SQL脚本', width: 150},
            {field: 'layered', title: '所在分层', hidden: true},
            {field: 'reportName', title: '所属报表', width: 100},
            {field: 'modularName', title: '所属模块', width: 100},
            {field: 'customerName', title: '所属客户', width: 100},
            {field: 'dataBaseType', title: '数据库类型'},
            {field: 'strLayered', title: '报表世界所在分层'},
            {
                field: 'demandBugType', title: '需求/BUG',
                formatter: function (value, row, index) {
                    if (isNull(value)) {
                        return "";
                    } else if (1 == value) {
                        return "需求";
                    } else {
                        return "BUG";
                    }
                }
            },
            {field: 'demandBugNum', title: '需求BUG编号'},
            {field: 'approvalReason', title: '退回原因'},
            {field: 'addUser', title: '添加人'},
            {field: 'addTime', title: '添加时间'},
            {field: 'editUser', title: '修改人'},
            {field: 'editTime', title: '修改时间'},
            {field: 'approvalUser', title: '审核人'},
            {field: 'approvalTime', title: '审核时间'},
            {
                field: 'coverPrimaryKey', title: '是否按照业务主键覆盖',
                formatter: function (value, row, index) {
                    if (2 == value) {
                        return "否";
                    } else {
                        return "是";
                    }
                }
            },
            {field: 'description', title: '描述', width: 100},
            {field: 'strStatus', title: '状态'},
            {field: 'version', title: '版本号'}
        ]],
        loadFilter: function (data) { //加载后台数据
            if (successcode != data.code) {
                return errorHandle(data);
            }
            return data.data;
        },
        //表格样式
        rowStyler: function (index, row) {
            return rowStyler(row.status);
        },
        //双击事件
        onDblClickRow: function (rowIndex, rowData) {
            view(rowData)
        }
    }).datagrid("columnMoving");;
    initData();
    setCombotree();
    $('#demandBugId').combobox({
        formatter: function (row) {
            if (isNull(row.description)) {
                return '<span class="item-text">' + row.demandBugNum + '</span>';
            }
            return '<span class="item-text">' + row.demandBugNum + "_" + row.description + '</span>';
        }
    })
    $('#selDemandBugId').combobox({
        formatter: function (row) {
            if (isNull(row.description)) {
                return '<span class="item-text">' + row.demandBugNum + '</span>';
            }
            return '<span class="item-text">' + row.demandBugNum + "_" + row.description + '</span>';
        }
    })
})

/**
 * 所属模块，客户，报表控制只能选择子节点
 */
function setCombotree() {
    $("#modularId").combotree({
        onSelect: function (node) {
            //返回树对象
            var tree = $(this).tree;
            //选中的节点是否为叶子节点,如果不是叶子节点,清除选中
            var isLeaf = tree('isLeaf', node.target);
            if (!isLeaf) {
                //清除选中
                $('#modularId').combotree('clear');
            }
        }
    });
    $("#customerId").combotree({
        onSelect: function (node) {
            //返回树对象
            var tree = $(this).tree;
            //选中的节点是否为叶子节点,如果不是叶子节点,清除选中
            var isLeaf = tree('isLeaf', node.target);
            if (!isLeaf) {
                //清除选中
                $('#customerId').combotree('clear');
            }
        }
    });
    $("#reportId").combotree({
        onSelect: function (node) {
            //返回树对象
            var tree = $(this).tree;
            //选中的节点是否为叶子节点,如果不是叶子节点,清除选中
            var isLeaf = tree('isLeaf', node.target);
            if (!isLeaf) {
                //清除选中
                $('#reportId').combotree('clear');
            }
        }
    });
}

// 初始化加载下拉框的值
function initData() {
    $.ajax({
            type: "post",
            url: reportworld + "/sqlScript/init",
            dataType: "json",
            success: function (data) {
                if (successcode != data.code) {
                    return errorHandle(data);
                }
                // 所属模块
                var listModular = data.data.listModular;
                // 字段所属客户
                var listCustomer = data.data.listCustomer;
                //字段所属报表
                var listReport = data.data.listReport;
                //版本号
                var listVersion = data.data.listVersion;
                //当前版本的bug和需求
                var demandBugInfoList = data.data.demandBugInfoList;
                // 表所在分层
                var listLayered = data.data.listLayered;
                //还原的版本
                var listReductionVersion = data.data.listReductionVersion;
                // 数据库类型
                var listReportDataBaseType = data.data.listReportDataBaseType;
                // 状态
                var listStatus = data.data.listStatus;
                if (!isNull(listModular)) {
                    $('#modularId').combotree({data: data.data.listModular2});
                    $('#selModular').combotree({data: listModular});
                }
                if (!isNull(listCustomer)) {
                    $('#customerId').combotree({data: data.data.listCustomer2});
                    $('#selCustomer').combotree({data: listCustomer});
                }
                if (!isNull(listReport)) {
                    $('#reportId').combotree({data: data.data.listReport2});
                    $('#selReport').combotree({data: listReport});
                }
                if (!isNull(listVersion)) {  //版本号
                    var listVersion2 = data.data.listVersion2;
                    listVersion2.unshift({"showmsg": "==全部==", "value": ''});
                    $("#selVersion").combobox("loadData", listVersion2);
                    $("#sqlScriptVersion").combobox("loadData", listVersion);
                }
                if (!isNull(demandBugInfoList)) {  //需求BUG
                    demandBugInfoList.unshift({"demandBugNum": "==请选择==", "id": ''});
                    $("#demandBugId").combobox("loadData", demandBugInfoList);
                    $("#selDemandBugId").combobox("loadData", demandBugInfoList);
                }
                if (!isNull(listLayered)) {  //表所在分层
                    listLayered.unshift({"showmsg": "==请选择==", "value": ''});
                    $("#layered").combobox("loadData", listLayered);
                }
                if (!isNull(listReductionVersion)) {  //还原的版本
                    $("#reductionData").show();
                    $("#reductionVersion").combobox("loadData", listReductionVersion);
                } else { // 没有版本不显示还原按钮
                    $("#reductionData").hide();
                }
                if (!isNull(listReportDataBaseType)) {  // 数据库类型
                    var listReportDataBaseType = data.data.listReportDataBaseType;
                    listReportDataBaseType.unshift({"showmsg": "==请选择==", "value": ''});
                    $("#dataBaseType").combobox("loadData", listReportDataBaseType);
                }
                if (!isNull(listStatus)) {  //状态
                    var listStatus2 = data.data.listStatus2;
                    listStatus2.unshift({"showmsg": "==全部==", "value": ''});
                    $("#selStatus").combobox("loadData", listStatus2);
                }
            }, error: function (data) {
                $.messager.progress('close');
                $.messager.alert('系统提示', "系统异常，请稍后重试！", 'error');
            }
        }
    );
}


//搜索的方法
function doSearch() {
    var queryParams = $("#dg").datagrid("options").queryParams;
    queryParams["demandBugId"] = $('#selDemandBugId').combobox('getValue');
    queryParams["strModular"] = getCommbotreeValueDetail("selModular");
    queryParams["strCustomer"] = getCommbotreeValueDetail("selCustomer");
    queryParams["strReport"] = getCommbotreeValueDetail("selReport");
    queryParams["status"] = $('#selStatus').combobox('getValue');
    queryParams["version"] = $('#selVersion').combobox('getValue');
    queryParams["sqlScript"] = $('#selSqlScript').val();
    $("#dg").datagrid("options").queryParams = queryParams;
    $("#dg").datagrid("load");
}

/**
 *  查看方法
 */
function view(rowData) {
    $('#myform').form('disableValidation');//清除验证样式
    $('#dlg').dialog({
        title: "查看SQL脚本信息",
        buttons: [{
            text: '返回',
            iconCls: 'icon-back',
            handler: function () {
                $('#dlg').dialog('close');
            }
        }
        ]
    }).dialog('open');
    if (!isNull(rowData.approvalReason)) {
        $("#approvalReasonTr").show();
    } else {
        $("#approvalReasonTr").hide();
    }
    $('#myform').form('load', rowData);//页面赋值
}


/**
 * 新增SQL脚本信息方法
 */
function addSqlScript() {
    $("#approvalReasonTr").hide();
    $("#myform").form('clear');//添加之前清空表达信息
    $('#myform').form('enableValidation');//设置验证样式
    $('#dlg').dialog({
        title: "新增SQL脚本信息",
        buttons: [{
            text: '保存',
            iconCls: 'icon-save',
            handler: function () {
                checkSqlScript(1);
            }
        }, {
            text: '返回',
            iconCls: 'icon-back',
            handler: function () {
                $('#dlg').dialog('close');
            }
        }
        ]
    }).dialog('open');
    $('#coverPrimaryKey').combobox('selectedIndex', 0); //选中第一个
    $('#sqlScriptVersion').combobox('selectedIndex', 0); //选中第一个
}

/**
 * 修改SQL脚本方法
 */
function editSqlScript() {
    $("#approvalReasonTr").hide();
    $('#myform').form('enableValidation');//设置验证样式
    var arr = $('#dg').datagrid('getSelections');
    if (null == arr || arr.length != 1) {
        $.messager.alert('系统提示', "请选择一行数据！", 'warning');
        return;
    }
    // 只能修改自己维护的数据
    if (arr[0].addUser != $("#userLoginId").val()) {
        $.messager.alert('系统提示', "只能修改当前登录人提交的数据！", 'warning');
        return;
    }
    if (3 != arr[0].status && 5 != arr[0].status) {  // 待审核和审核不通过的才可以修改
        $.messager.alert('系统提示', "请选择待审核和审核不通过的数据修改！", 'warning');
        return;
    }
    if (null == arr || arr.length == 0) {
        $.messager.alert('系统提示', "请选择你要" + msg + "的用户！", 'warning');
        return;
    }
    $('#dlg').dialog({
        title: "修改SQL脚本信息",
        buttons: [{
            text: '保存',
            iconCls: 'icon-save',
            handler: function () {
                checkSqlScript(2);
            }
        }, {
            text: '返回',
            iconCls: 'icon-back',
            handler: function () {
                $('#dlg').dialog('close');
            }
        }
        ]
    }).dialog('open');
    $('#myform').form('load', arr[0]);//页面赋值
}

/**
 * 检查所属模块，报表，客户 至少选择一个
 */
function checkCustomerModularReport() {
    var modularId = $("#modularId").combotree("getValue");
    var customerId = $("#customerId").combotree("getValue");
    var reportId = $("#reportId").combotree("getValue");
    /*   if (isNull(modularId) && isNull(customerId) && isNull(reportId)) {
           return true;
       }*/
    return false;
}


/**
 * 检查脚本
 * @lsetlist name
 */
function checkSqlScript(ftype) {
    var sqlScript = $("#sqlScript").textbox('getValue');
    if (!isNull(sqlScript) && sqlScript.toUpperCase().indexOf("CREATE TABLE") > -1 && isNull($('#layered').combobox('getValue'))) { // 包含建表语句，选择所在分层
        $.messager.alert('系统提示', "脚本中包含建表语句，请选择表所在分层！", 'warning');
        return;
    }
    if ("2" == $('#coverPrimaryKey').combobox('getValue')
        && isNull($("#modularId").combotree("getValue"))
        && isNull($("#customerId").combotree("getValue"))
        && isNull($("#reportId").combotree("getValue"))) {
        $.messager.alert('系统提示', "不覆盖业务主键的数据必须要有选择所属报表，所属模块或者所属客户，请选择所属客户，所属模块或者所属报表！", 'warning');
        return;
    }
    //验证表单信息
    if (!$("#myform").form('validate')) { //验证表单信息
        return;
    }
    if (checkCustomerModularReport()) {
        $.messager.alert('系统提示', "所属模块，所属客户，所属报表至少选择一个！", 'warning');
        return;
    }
    $.messager.progress({text: '正在检查中...',});
    $.ajax({
        url: reportworld + "/sqlScript/checkSqlScript",
        method: 'post',
        data: {
            "sqlScript": sqlScript,
            "layered": $('#layered').combobox('getValue'),
            "dataBaseType": $('#dataBaseType').combobox('getValue'),
            "coverPrimaryKey": $('#coverPrimaryKey').combobox('getValue'),
            "modularId": $("#modularId").combotree("getValue"),
            "customerId": $("#customerId").combotree("getValue"),
            "reportId": $("#reportId").combotree("getValue")
        },
        success: function (data) {
            $.messager.progress('close');
            if (0 == data.code && data.message) { //业务异常信息
                $('#msgInfoDialog').dialog({
                    title: "SQL信息检查",
                    buttons: [{
                        text: '返回',
                        iconCls: 'icon-back',
                        handler: function () {
                            $('#msgInfoDialog').dialog('close');
                        }
                    }
                    ]
                }).dialog('open');
                $("#msgInfo").textbox('setValue', data.message);
                return;
            }
            if (successcode != data.code) {
                return errorHandle(data);
            }
            if (isNull(data.data)) {
                saveItemSqlScript(ftype);
                return;
            }
            $('#msgInfoDialog').dialog({
                title: "SQL信息检查",
                buttons: [{
                    text: '确定',
                    iconCls: 'icon-save',
                    handler: function () {
                        saveItemSqlScript(ftype);
                    }
                }, {
                    text: '返回',
                    iconCls: 'icon-back',
                    handler: function () {
                        $('#msgInfoDialog').dialog('close');
                    }
                }
                ]
            }).dialog('open');
            $("#msgInfo").textbox('setValue', data.data);
        }
        ,
        error: function (data) {
            $.messager.progress('close');
            $.messager.alert('系统提示', "系统异常，请稍后重试！", 'error');
        }
    })
    ;
}

/**
 * 保存SQL脚本信息的方法
 */
function saveItemSqlScript(ftype) {
    var url = reportworld + "/sqlScript/editSqlScript";
    if (1 == ftype) {
        url = reportworld + "/sqlScript/addSqlScript";
    }
    $.messager.confirm('系统提示', "确定保存SQL脚本信息吗？", function (parm) {
        if (!parm) {
            return;
        }
        $.messager.progress({text: '正在处理中...',});
        $('#myform').form('submit', {
            url: url,
            onSubmit: function (param) {
                $.messager.progress({text: '正在处理中...',});
            }, success: function (data) {
                $.messager.progress('close');
                try {
                    data = JSON.parse(data);
                    if (successcode != data.code) {
                        return errorHandle(data);
                    }
                    //关闭弹出窗口
                    $('#msgInfoDialog').dialog('close');
                    $('#dlg').dialog('close');
                    $.messager.show({title: '系统提示', msg: data.message});
                    $("#dg").datagrid("load");//刷新表格
                } catch (e) {
                    $.messager.progress('close');
                    $.messager.alert('系统提示', "系统异常，请稍后重试！", 'error');
                }
            }
        });
    });
}

/**
 * 删除SQL脚本信息方法
 */
function delSqlScript() {
    var arr = $('#dg').datagrid('getSelections');
    if (null == arr || arr.length == 0) {
        $.messager.alert('系统提示', "请选择你要删除的数据！", 'warning');
        return;
    }
    var ids = [];
    for (var i = 0; i < arr.length; i++) {
        if (3 == arr[0].status || 5 == arr[0].status) {  // 待审核的数据才能审核
            ids.push(arr[i].id);
        }
    }
    if (isNull(ids)) {
        $.messager.alert('系统提示', "你选择的数据中没有待审核和审核退回的数据，只有待审核或者审核退回的的数据才能删除！", 'warning');
        return;
    }
    $.messager.confirm('系统提示', '确定要删除这' + ids.length + '条操SQL脚本信息吗？', function (param) {
        if (!param) {
            return;
        }
        $.messager.progress({text: '正在处理中...',});
        $.ajax({
                type: "post",
                url: reportworld + "/sqlScript/delSqlScript",
                dataType: "json",
                data: {
                    ids: JSON.stringify(ids)
                },
                success: function (data) {
                    $.messager.progress('close');
                    if (successcode != data.code) {
                        return errorHandle(data);
                    }
                    $("#dg").datagrid("load");//刷新表格
                    $.messager.show({title: '系统提示', msg: data.message});
                }, error: function (data) {
                    $.messager.progress('close');
                    $.messager.alert('系统提示', "系统异常，请稍后重试！", 'error');
                }
            }
        );
    });
}


/**
 * 读取文件
 * @param fileName
 */
function setFilePreview(fileName) {
    $.messager.confirm('系统提示', "确定导入脚本信息吗？", function (parm) {
        if (!parm) {
            return;
        }
        $('#subFile').form('submit', {
            url: reportworld + "/sqlScript/sqlScriptReadFile",
            onSubmit: function (param) {
                $.messager.progress({text: '正在处理中...'});
            }, success: function (data) {
                $.messager.progress('close');
                data = JSON.parse(data);
                $("#uploadFile").val("");
                if (successcode != data.code) {
                    return errorHandle(data);
                }
                //把脚本信息放到 SQL脚本 里面
                $("#sqlScript").textbox('setValue', data.data);
            }, error: function (data) {
                $("#uploadFile").val("");
                $.messager.alert('系统提示', "系统异常，请稍后重试！", 'error');
            }
        });
    });
}

/**
 * 审核脚本
 */
function processSqlScript() {
    var arr = $('#dg').datagrid('getSelections');
    if (null == arr || arr.length == 0) {
        $.messager.alert('系统提示', "请选择你要审核的数据！", 'warning');
        return;
    }
    var ids = [];
    for (var i = 0; i < arr.length; i++) {
        if (3 == arr[0].status) {  // 待审核的数据才能审核
            ids.push(arr[i].id);
        }
    }
    if (isNull(ids)) {
        $.messager.alert('系统提示', "你选择的数据中没有待审核的数据！", 'warning');
        return;
    }
    $.messager.confirm('系统提示', '确定要审核这' + ids.length + '条操SQL脚本信息吗？', function (param) {
        if (!param) {
            return;
        }
        $.messager.progress({text: '正在处理中...',});
        $.ajax({
                type: "post",
                url: reportworld + "/sqlScript/processSqlScript",
                dataType: "json",
                data: {
                    ids: JSON.stringify(ids),
                    check: false
                },
                success: function (data) {
                    $.messager.progress('close');
                    if (successcode != data.code) {
                        return errorHandle(data);
                    }
                    $("#dg").datagrid("load");//刷新表格
                    $('#msgInfoDialog').dialog({
                        title: "审核信息",
                        buttons: [{
                            text: '返回',
                            iconCls: 'icon-back',
                            handler: function () {
                                $('#msgInfoDialog').dialog('close');
                            }
                        }
                        ]
                    }).dialog('open');
                    $("#msgInfo").textbox('setValue', data.data.msgInfo);
                }, error: function (data) {
                    $.messager.progress('close');
                    $.messager.alert('系统提示', "系统异常，请稍后重试！", 'error');
                }
            }
        );
    });
}

/**
 * 退回
 */
function rebutSqlScript() {
    var arr = $('#dg').datagrid('getSelections');
    if (null == arr || arr.length == 0) {
        $.messager.alert('系统提示', "请选择你要退回的数据！", 'warning');
        return;
    }
    var ids = [];
    for (var i = 0; i < arr.length; i++) {
        if (3 == arr[0].status) {  // 待审核的数据才能退回
            ids.push(arr[i].id);
        }
    }
    if (isNull(ids)) {
        $.messager.alert('系统提示', "你选择的数据中没有待审核的数据！", 'warning');
        return;
    }
    $.messager.confirm('系统提示', '确定要退回这' + ids.length + '条操SQL脚本信息吗？', function (param) {
        if (!param) {
            return;
        }
        $('#rebutSqlScript').dialog({
            title: "退回原因描述",
            buttons: [{
                text: '保存',
                iconCls: 'icon-save',
                handler: function () {
                    //验证表单信息
                    if (!$("#myform2").form('validate')) { //验证表单信息
                        return;
                    }
                    $.messager.progress({text: '正在处理中...',});
                    $.ajax({
                            type: "post",
                            url: reportworld + "/sqlScript/rebutSqlScript",
                            dataType: "json",
                            data: {
                                ids: JSON.stringify(ids),
                                msg: $("#approvalReason").textbox("getValue")
                            },
                            success: function (data) {
                                $.messager.progress('close');
                                if (successcode != data.code) {
                                    return errorHandle(data);
                                }
                                $("#dg").datagrid("load");//刷新表格
                                $('#rebutSqlScript').dialog('close');
                                $.messager.show({title: '系统提示', msg: data.message});
                            }, error: function (data) {
                                $.messager.progress('close');
                                $.messager.alert('系统提示', "系统异常，请稍后重试！", 'error');
                            }
                        }
                    );
                }
            }, {
                text: '返回',
                iconCls: 'icon-back',
                handler: function () {
                    $('#rebutSqlScript').dialog('close');
                }
            }
            ]
        }).dialog('open');
    });
}

/**
 * 还原版本
 */
function reductionData() {
    $('#dlgReductionVersion').dialog({
        title: "还原版本选择",
        buttons: [{
            text: '保存',
            iconCls: 'icon-save',
            handler: function () {
                var reductionVersion = $('#reductionVersion').combobox('getValue');
                if (isNull(reductionVersion)) {
                    $.messager.alert('系统提示', "没有获取到还原的版本号，请稍后重试！", 'error');
                    return;
                }
                $.messager.confirm('系统提示', '确定要还原到' + reductionVersion + '这个版本吗？', function (param) {
                    if (!param) {
                        return;
                    }
                    $.messager.progress({text: '正在处理中...',});
                    $.ajax({
                            type: "post",
                            url: reportworld + "/sqlScript/reductionData",
                            dataType: "json",
                            data: {
                                reductionVersion: reductionVersion
                            },
                            success: function (data) {
                                $.messager.progress('close');
                                if (successcode != data.code) {
                                    return errorHandle(data);
                                }
                                $("#dg").datagrid("load");//刷新表格
                                $('#dlgReductionVersion').dialog('close');
                                $.messager.show({title: '系统提示', msg: data.message});
                            }, error: function (data) {
                                $.messager.progress('close');
                                $.messager.alert('系统提示', "系统异常，请稍后重试！", 'error');
                            }
                        }
                    );
                });
            }
        }, {
            text: '返回',
            iconCls: 'icon-back',
            handler: function () {
                $('#dlgReductionVersion').dialog('close');
            }
        }
        ]
    }).dialog('open');

}


/**
 * 导出execl
 */
function downSqlScriptFile() {
    var arr = $('#dg').datagrid('getSelections');
    var ids = [];
    for (var i = 0; i < arr.length; i++) {
        ids.push(arr[i].id);
    }
    $.messager.confirm('系统提示', "确定要导出" + arr.length + "脚本数据吗？", function (param) {
        if (!param) {
            return;
        } else {
            $.messager.show({title: '系统提示', msg: "正在导出数据中，请稍后！"});
            $('#myform').form('submit', {
                url: reportworld + "/sqlScript/downSqlScriptFile",
                onSubmit: function (param) {
                    param.ids = JSON.stringify(ids);
                }, success: function (data) {
                }
            });
        }
    })
}
